///////////////////////////////////////////////////////////
//  IGameWindow.h
//  Implementation of the Interface IGameWindow
//  Created on:      11-Jan-2015 4:13:27 PM
//  Original author: Eng. Ahmed Yasser
///////////////////////////////////////////////////////////

#if !defined(EA_B4FA8638_BD97_4d03_8B60_8FA32F49363F__INCLUDED_)
#define EA_B4FA8638_BD97_4d03_8B60_8FA32F49363F__INCLUDED_

#include <Windows.h>
#include <string>

namespace EngineGame
{
	namespace EngineCore
	{
		/**
		 * The basic definitions of any game window used to render game elements
		 * @author Eng. Ahmed Yasser
		 * @version 1.0
		 * @updated 12-Jan-2015 12:01:55 PM
		 */
		class IGameWindow
		{

		public:
			IGameWindow() {

			}

			virtual ~IGameWindow() {

			}

			IGameWindow(const IGameWindow& theIGameWindow) {

			}

			/**
			 * Creates a new window based on the settings supplied
			 * 
			 * @param hInstance    The instance handle of the application
			 * @param windowTitle    The title of the window
			 * @param windowWidth    The width of the window
			 * @param windowHeight    The height of the window
			 */
			virtual void createWindow(HINSTANCE hInstance, std::string windowTitle, int windowWidth, int windowHeight) =0;
			/**
			 * Destroy the window and removes its resources from the memory
			 */
			virtual void destroyWindow() =0;
			/**
			 * Process the massages in the window
			 */
			virtual void processEvents() =0;

		};

	}

}
#endif // !defined(EA_B4FA8638_BD97_4d03_8B60_8FA32F49363F__INCLUDED_)
